package com.zhangshanfeng.test;

import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.stream.Stream;

/*
### Stream流终结操作方法【应用】

- 概念

  终结操作的意思是,执行完此方法之后,Stream流将不能再执行其他操作

- 常见方法

  | 方法名                        | 说明                     |
  | ----------------------------- | ------------------------ |
  | void forEach(Consumer action) | 对此流的每个元素执行操作 |
  | long count()                  | 返回此流中的元素数       |
 */
public class MyStream04 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();

        list.add("张三丰");
        list.add("张无忌");
        list.add("张翠山");
        list.add("王二麻子");
        list.add("张良");
        list.add("谢广坤");
        list.add("sdfjosi");
        list.add("sdoujfgoi");
        list.add("puip");
        //  void forEach(Consumer action)：对此流的每个元素执行操作

        //  Consumer接口中的方法void accept(T t)：对给定的参数执行此操作

        /*Stream<String> stream = list.stream();
        stream.forEach(s-> System.out.println(s));

        //终结流操作过了就
        long count = stream.count();
        System.out.println(count);
        */
        //不单独写出来就可以操作
        list.stream().forEach(s-> System.out.println(s));
        long count = list.stream().count();
        System.out.println(count);

        //  void forEach(Consumer action)：对此流的每个元素执行操作
        //  Consumer接口中的方法void accept(T t)：对给定的参数执行此操作
        //在forEach方法的底层,会循环获取到流中的每一个数据.
        //并循环调用accept方法,并把每一个数据传递给accept方法
        //s就依次表示了流中的每一个数据.
        //所以,我们只要在accept方法中,写上处理的业务逻辑就可以了.

        list.stream().forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        list.stream().forEach((String s)->{
            System.out.println(s);
        });

        list.stream().forEach(s-> System.out.println(s));



    }
}
